package com.redoor.app.stake.basicdata.service;

import com.redoor.app.stake.basicdata.model.BaseParkingArea;
import com.redoor.app.stake.basicdata.model.BaseStation;
import com.redoor.app.stake.basicdata.model.BussinessTypeEnum;
import com.redoor.app.stake.basicdata.model.UsrDistrict;
import com.redoor.app.stake.basicdata.model.controllerModel.BaseStationCriteria;
import com.redoor.app.stake.basicdata.model.controllerModel.BaseStationModifyBean;
import com.redoor.app.stake.basicdata.model.serviceModel.BaseStationServiceBean;
import com.redoornetwork.framework.mybatis.service.Service;
import com.yotouch.app.stake.model.ChargingMonitor;
import com.yotouch.app.stake.model.CityData;
import com.yotouch.app.stake.model.Station;

import java.util.List;
import java.util.Map;

/**
 * Created by wangjunlei on 2018-02-12 10:08:10.
 */
public interface BaseStationService {
    /**
     * 查询充电站详细列表
     * @param params
     * @return
     */
    List<BaseStation> qryStationInfoDetail(BaseStationCriteria params);

    /**
     * 查询充电站详细列表
     * @param params
     * @return
     */
    List<BaseStationServiceBean> qryStationServiceInfoDetail(BaseStationCriteria params);

    /**
     * 查询充电站详细列表-HSF接口对象
     * @param params
     * @return
     */
    List<Station> qryStationInfoDetailForHSF(BaseStationCriteria params);

    /**
     * 根据uuid查询站信息-HSF接口
     * @param uuid
     * @return
     */
    Station findByUuidForHsf(String uuid);
    /**
     * 查询充电站列表数量
     * @param params
     * @return
     */
    int qryStationInfoCnt(BaseStationCriteria params);

    /**
     *
     * @param uuid
     */
    int deleteStation(String uuid,BussinessTypeEnum.TRACE_TYPE sourcetype);

    /**
     * 根据uuid查询站信息
     * @param uuid
     * @return
     */
    BaseStation findById(String uuid);

    /**
     *
     * @param info
     */
    String saveStation(BaseStation info,BussinessTypeEnum.TRACE_TYPE sourcetype);

    /**
     *
     * @param info
     * @return
     */
    int updateBySelective(BaseStation info,BussinessTypeEnum.TRACE_TYPE sourcetype);

    /**
     * 修改站信息
     * @param info
     * @param sourcetype 操作类型
     * @param operatoruuid 操作类型对应uuid
     * @return
     */
    int updateBySelective(BaseStation info,BussinessTypeEnum.TRACE_TYPE sourcetype,String operatoruuid);

    /**
     * 站页面修改站区信息
     * @param baseStationInfo 站以及区列表
     * @param sourcetype
     * @return
     */
    int modifyStationAndParkingArea(BaseStationModifyBean baseStationInfo,BussinessTypeEnum.TRACE_TYPE sourcetype);
    /**
     *
     * @param stationuuid
     * @return
     */
    Map<String,Object> qryStationStakeCntGroupByOperator(String stationuuid);

    /**
     *
     * @param stationuuid
     * @return
     */
    Map<String,Object> qryStationStakeTypeCnt(String stationuuid);


    /**
     * 初始化站列表到缓存中
     * @return
     */
    boolean initHSFStationRedis();

    /**
     * 查询站下的停车区列表（先从缓存获取，再查数据库）
     * @param stationuuid
     * @return
     */
    List<BaseParkingArea> qryParkingAreaListForStationUuid(String stationuuid);
    /**
     * HSF大屏接口调用
     * 查询充电站地理信息包括充电站实时状态、设备状态等信息
     * @Author zhangYiHang
     * @Date 2018/3/27 16:16
     * @Param
     */
    List<ChargingMonitor> qryStationinfoByConditionToHSF(Map<String, Object> map);
    /**
     * HSF大屏接口调用
     * 查询充电站地理信息包括充电站实时状态、设备状态等信息总数
     * @Author zhangYiHang
     * @Date 2018/3/27 16:36
     * @Param
     */
    int qryStationinfoByConditionTotalToHSF(Map<String, Object> map);

    /**
     * 根据站编号查询对象
     * @Author zhangYiHang
     * @Date 2018/3/28 14:10
     * @Param
     */
    BaseStation qryStationBySataionNo(String stationNo);
    /**
     * HSF接口调用
     * 根据高速编号查询对象
     * @Author zhangYiHang
     * @Date 2018/3/28 16:56
     * @Param
     */
    List<BaseStation> qryStationBygsNo(String gsNo);
    /**
     * HSF接口 调用
     * 查询区域站点数量
     * @Author zhangYiHang
     * @Date 2018/3/29 9:32
     * @Param
     */
    List<CityData> qryCitysStationInfo(Map<String, Object> map);
    /**
     * 根据站名称验证数据是否存在
     * @Author zhangYiHang
     * @Date 2018/4/12 20:08
     * @Param
     */
    int qryStationCountByName(String name);
}
